public class GoWinUtils {
    //测试的主函数
    //函数写成静态的可以直接调用
    public static boolean isWin(int[][]chessArray,int r,int c) {
        //判断四个大方向是否有五子连棋子
        if (row(chessArray,r,c)>=5 ||
                column(chessArray,r,c)>=5||
                leftUpToRightDown(chessArray,r,c)>=5 ||
                RightUpToLeftDown(chessArray,r,c)>=5) {
            return true;
        }
        return false;
    }
    //判断横向
    public static int row(int[][]chessArray,int r,int c) {
        int count = 1;
        //指当前下的棋子
        int cnum = chessArray[r][c];
        //向右找
        for(int i=c+1;i<chessArray.length;i++) {
            //判断从右边第一颗棋子开始是否与所下棋子一致
            if(cnum==chessArray[r][i]) {
                count++;
            }else {
                break;//如果右边是不同数值的棋子，就不用再往右找了
            }

        }
        System.out.println("横向向右查找到：count="+count);
        //向左找
        for(int i=c-1;i>=0;i--) {
            if(cnum==chessArray[r][i]) {
                count++;
            }else {
                break;//如果右边是不同数值的棋子，就不用再往右找了
            }
        }
        System.out.println("横向向左查找到：count="+count);

        return count;
    }
    //判断纵向
    public  static int column(int[][]chessArray,int r,int c) {
        int count = 1;
        int cnum = chessArray[r][c];
        //向下找
        for(int i=r+1;i<chessArray.length;i++) {
            if(cnum==chessArray[i][c]) {
                count++;
            }else {
                break;
            }
        }
        System.out.println("纵向向下查找到：count="+count);

        //向上找
        for(int i=r-1;i>=0;i--) {
            if(cnum==chessArray[i][c]) {
                count++;
            }else {
                break;
            }
        }
        System.out.println("纵向向下查找到：count="+count);

        return count;
    }


    //判断左上到右下
    public static int leftUpToRightDown(int[][]chessArray,int r,int c) {
        int count = 1;
        int cnum = chessArray[r][c];
        //向左上角找 行列都变小 i-- j--
        for(int i=r-1,j=c-1;i>=0 && j>=0;i--,j--) {
            if(cnum == chessArray[i][j]) {
                count++;
            }else {
                break;
            }

        }
        System.out.println("向左上方查找到：count="+count);
        //向右下方查找 行列都变大 i++ j++
        for(int i=r+1,j=c+1;i<chessArray.length &&j<chessArray.length;i++,j++) {
            if(cnum==chessArray[i][j]) {
                count++;
            }else {
                break;
            }
        }
        System.out.println("向右下方查找到：count="+count);
        return count;
    }
    //判断右上到左下
    public static int RightUpToLeftDown(int[][]chessArray,int r,int c) {
        int count = 1;
        int cnum = chessArray[r][c];
        //向右上角找 列变大行变小 j++ i--
        for(int i=r-1,j=c+1;i>=0&&j<chessArray.length;i--,j++) {
            if(cnum==chessArray[i][j]) {
                count++;
            }else {
                break;
            }
        }
        System.out.println("向右上方查找到：count="+count);
        //向左下角查找 列变小行变大 j-- i++
        for(int i=r+1,j=c-1;i<chessArray.length&&j>=0;i++,j--) {
            if(cnum==chessArray[i][j]) {
                count++;
            }else {
                break;
            }
        }
        System.out.println("向左下方查找到：count="+count);
        return count;
    }

}


